package leetcode;

public class _0142 {
    /**
     * 环形链表 II
     */
    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */
    public class Solution {
        private class ListNode {
            ListNode next;
            int val;
            ListNode(){}
            ListNode(int val){
                this.val=val;
            }
            ListNode(int val, ListNode next){
                this.val = val;
                this.next = next;
            }
        }
        public ListNode detectCycle(ListNode head) {
            ListNode slow = head, fast = head;
            while(fast!=null&&fast.next!=null){
                slow = slow.next;
                fast = fast.next.next;
                if(fast==slow){
                    while(slow!=head){
                        slow = slow.next;
                        head = head.next;
                    }
                    return slow;
                }
            }
            return null;
        }
    }
}
